package cn.bugstack.openai.executor.model.baichuan.valobj;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author llq
 * @Description 百川智能大模型 请求参数
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BaiChuanModelCompletionRequest {

    /** 使用的模型 */
    private String model = "Baichuan2-Turbo";

    /** 对话消息列表 (历史对话按从老到新顺序填入) */
    private List<Message> messages;

    /** 是否使用流式接口，不给值时，AI服务器端默认为 false */
    private Boolean stream = true;

    /** 取值范围: [.0f, 1.0f]。 多样性，越高，多样性越好, 缺省 0.3 */
    private Float temperature = 0.3f;

    /** 取值范围: [.0f, 1.0f)。值越小，越容易出头部, 缺省 0.85 */
    private Float top_p = 0.85f;

    /** 取值范围: [0, 20]。搜索采样控制参数，越大，采样集大, 0 则不走 top_k 采样筛选策略，最大 20(超过 20 会被修正成 20)，缺省 5 */
    private Integer top_k = 5;

    /** True: 开启 web 搜索增强，搜索增强会产生额外的费用, 缺省 False */
    private Boolean with_search_enhance = false;

    /** 知识库信息 */
    private KnowledgeBase knowledge_base;



    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class KnowledgeBase {
        /** 知识库 id 列表,当with_search_enhance 与 knowledge_base 同时被设置时默认使用知识库检索。开启知识库后不支持场景设定等复杂指令，只支持输入问题。 */
        private List<String> ids;

        /** knowledge-base-only：
         仅知识库模式，当检索没有召回，模型不作回答
         缺省：没有召回结果，大模型自身输出结果。 */
        private String answer_mode;

    }
}
